# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.mlab import csv2rec
import numpy as np
__author__ =  'Sérgio Sardo'
__version__=  '1.0'

''' ---------- Parte IV - Gerar Gráficos a partir dos ficheiros CSV ---------- '''

def autolabel(rects):
    """Faz a rotulagem automática dos valores dos gráficos."""
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.035*height, '%d'%int(height),
                ha='center', va='bottom', fontsize=8)

def colocadosInst(a):
    """Gera o gráfico dos alunos colocados por instituição."""
    valores = dict()
    aX = []
    aNames = []

    for x in a:
        valores[x.nome] = x.soma
        
    aNames = valores.keys()
    aX = valores.values()
    xTitle = u"Instituições de Ensino"
    yTitle = u"Alunos Colocados"
    
    x_pos = np.arange(len(aNames))
    plt.title(u"Alunos Colocados por Instituição")
    plt.ylabel(yTitle)
    plt.xlabel(xTitle)
    plt.grid()
    plt.xticks(range(0,35,1),aNames,fontsize=6)
    plt.xticks(rotation=90)
    plt.xlim(min(x_pos) - 0.5, max(x_pos) + 0.5)
    
    autolabel(plt.bar(x_pos, aX, 0.15, align='center'))
    plt.show()

def colocadosDist(c):
    """Gera o gráfico dos alunos colocados por Distrito."""
    aX = []
    aNames = []
    valores = dict()
    for x in c:
        valores[x.cod_distrito] = x.soma
    aNames = valores.keys()
    aX = valores.values()
    plt.title("Alunos Colocados por Distrito")
    plt.ylabel("Alunos Colocados")
    plt.xlabel("Distritos")
    x_pos = np.arange(len(aNames))
    plt.xticks(range(0,20,1), fontsize=8)
    plt.xticks(x_pos, [u"Açores", u"Aveiro", u"Braga", u"Bragança", u"Beja", u"Castelo Branco", u"Coimbra", u"Évora", u"Faro", u"Guarda", u"Leiria", u"Lisboa",
                  u"Madeira", u"Portalegre", u"Porto", u"Santarém", u"Setúbal", u"Viana do Castelo", u"Vila Real", u"Viseu"], rotation=90)
    plt.grid()
    autolabel(plt.bar(x_pos, aX, 0.30, align = 'center'))
    plt.show()

def permilDist(calc_aux):
    """Gera o gráfico da permilagem de alunos colocados por distrito."""
    aX = []
    aNames = []
    valores = dict()
    for x in calc_aux:
        valores[x[0]] = x[1]
    aNames = valores.keys()
    aX = valores.values()
    plt.title("Permilagem dos Alunos Colocados por Distrito")
    plt.ylabel("Permilagem - Alunos Colocados (0/00)")
    plt.xlabel("Distritos")
    x_pos = np.arange(len(aNames))
    plt.xticks(range(0,20,1), fontsize=8)
    plt.xticks(x_pos, [u"Açores", u"Aveiro", u"Braga", u"Bragança", u"Beja", u"Castelo Branco", u"Coimbra", u"Évora", u"Faro", u"Guarda", u"Leiria", u"Lisboa",
                  u"Madeira", u"Portalegre", u"Porto", u"Santarém", u"Setúbal", u"Viana do Castelo", u"Vila Real", u"Viseu"], rotation=90)
    plt.grid()
    autolabel(plt.bar(x_pos, aX, 0.30, align = 'center', ))
    plt.title("Permilagem de Alunos Colocados por Distrito")
    plt.show()

def percentColocadosInst(calc_auxB):
    """Gera o gráfico da percentagem de alunos colocados por instituição."""
    valores = dict()
    aX = []
    aNames = []

    for x in calc_auxB:
          valores [x[1].decode('utf-8')] = float(x[2])
        
    aNames = valores.keys()
    aX = valores.values()
    xTitle = u"Instituições de Ensino"
    yTitle = u"Percentagem de Alunos Colocados (%)"
    
    x_pos = np.arange(len(aNames))
    plt.title(u"Vagas por Colocar por Instituição")
    plt.ylabel(yTitle)
    plt.xlabel(xTitle)
    plt.grid()
    plt.xticks(range(0,35,1),aNames,fontsize=6)
    plt.xticks(rotation=90)
    plt.xlim(min(x_pos) - 0.5, max(x_pos) + 0.5)
    
    autolabel(plt.bar(x_pos, aX, 0.15, align='center'))
    plt.show()

def vagasInst(f):
    """Gera o gráfico do número de vagas sobrantes por instituição."""
    valores = dict()
    aX = []
    aNames = []

    for x in f:
          valores [x[1]] = float(x[2])
        
    aNames = valores.keys()
    aX = valores.values()
    xTitle = u"Instituições de Ensino"
    yTitle = u"Vagas por Colocar"
    
    x_pos = np.arange(len(aNames))
    plt.title(u"Vagas por Colocar por Instituição")
    plt.ylabel(yTitle)
    plt.xlabel(xTitle)
    plt.grid()
    plt.xticks(range(0,35,1),aNames,fontsize=6)
    plt.xticks(rotation=90)
    plt.xlim(min(x_pos) - 0.5, max(x_pos) + 0.5)
    
    autolabel(plt.bar(x_pos, aX, 0.15, align='center'))
    plt.show()

def vagasDist(g):
    """Gera o gráfico do número de vagas sobrantes por distrito."""
    valores = dict()
    aX = []
    aNames = []

    for x in g:
          valores [x[0]] = x[1]
        
    aNames = valores.keys()
    aX = valores.values()
    xTitle = u"Distritos"
    yTitle = u"Vagas por Colocar"
    
    x_pos = np.arange(len(aNames))
    plt.title("Vagas por Colocar por Distrito")
    plt.ylabel(yTitle)
    plt.xlabel(xTitle)
    plt.grid()
    plt.xticks(x_pos, [u"Açores", u"Aveiro", u"Braga", u"Bragança", u"Beja", u"Castelo Branco", u"Coimbra", u"Évora", u"Faro", u"Guarda", u"Leiria", u"Lisboa",
                  u"Madeira", u"Portalegre", u"Porto", u"Santarém", u"Setúbal", u"Viana do Castelo", u"Vila Real", u"Viseu"], rotation=90)
    
    plt.xticks(rotation=90)
    plt.xlim(min(x_pos) - 0.5, max(x_pos) + 0.5)
    
    autolabel(plt.bar(x_pos, aX, 0.15, align='center'))
    plt.show()

''' ---------- Fim da Parte IV ---------- '''
